import { getUserBaseInfo, getEmployeeBaseInfo, login } from '@/api/user'
import { resetRouter } from '@/router'
import { getToken, removeToken, setToken } from '@/utils/auth'
export default {
  // 调用方法mutations和actions必须加上模块名称才能调用
  namespaced: true,
  state: {
    token: getToken(),
    userInfo: {}// 用户信息
  },
  mutations: {
    // 页面调用模块中的方法
    // 默认方式：this.$store.commit('方法名')
    // 开启命名空间的钥匙：this.$store.commit('模块名/方法名')
    setToken(state, token) {
      console.log(token + '------------------------------')

      console.log('user模块的setToken被调用')
      setToken(token)
      state.token = token// 做token的持久化
    },
    removeToken(state) {
      state.token = undefined
      removeToken()
    },
    setUserInfo(state, data) {
      state.userInfo = data
    },
    removeUserInfo(state) {
      state.userInfo = {}
    }
  },
  actions: {
    // 在vuex的user模块的login  action方法中发送请求token和储存token到vuex中
    async login(context, loginForm) {
      // context等效于this.$store
      const token = await login(loginForm)
      context.commit('setToken', token)
    },
    logout(context) {
      context.commit('removeToken')
      context.commit('removeUserInfo')
      // 重置路由，防止重复addRoutes路由配置
      resetRouter()
    },
    // 定义action调用接口获取用户信息
    async getUserInfo(context) {
      const getUser = await getUserBaseInfo()
      const getEmploy = await getEmployeeBaseInfo(getUser.userId)
      const userInfo = { ...getUser, ...getEmploy }
      context.commit('setUserInfo', userInfo)
      return userInfo
    }
  }
}
